Windowsdrucker mit VBScript ermitteln

VBScript ist ein starkes Instrument, um dem Windows-System Informationen zu entlocken. Stefan Schnell hat bereits einige Beispiele für die Verwendung von VBScript in ABAP geliefert (Siehe unten). Nachdem ich mit Stefans Hilfe kurz gezeigt habe, wie man die Bildschirmauflösung mittels VBScript ermitteln kann (Bildschirmauflösung ermitteln mit VBScript), hier noch ein Bespiel, das demonstriert, wie man das Ergebnis einer VBScript-Funktion zurück ins ABAP bekommt und wie man das Ergebnis als “Tabelle” übergeben kann.

Code

Das folgende Beispielprogramm liefert alle im Windows installierten Drucker als Tabelle zurück.

REPORT.


CLASS lcl_wmi DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS get_printers RETURNING VALUE(result) TYPE string_table.
ENDCLASS.

CLASS lcl_wmi IMPLEMENTATION.

  METHOD get_printers.

    "-Macros--------------------------------------------------------------
    DEFINE _.
      vbscode = vbscode && &1 && cl_abap_char_utilities=>cr_lf.
    END-OF-DEFINITION.

    "-Variables-----------------------------------------------------------
    DATA scriptctrl TYPE obj_record.
    DATA vbscode TYPE string.
    DATA result_string TYPE string.


    "-Main----------------------------------------------------------------
    _ 'Function GetPrinters()'.
    _ '  Set oObj = GetObject("winmgmts:\\.\root\cimv2", "")'.
    _ '  If IsObject(oObj) Then'.
    _ '    Set colItems = oObj.ExecQuery("Select * from Win32_PrinterConfiguration",,48)'.
    _ '    For Each oItem in colItems'.
    _ '      Res = Res & vbCrLf & oItem.Description'.
    _ '    Next'.
    _ '    GetPrinters = Res'.
    _ '  End If'.
    _ 'End Function'.
    CREATE OBJECT scriptctrl 'MSScriptControl.ScriptControl'.
    CHECK sy-subrc = 0 AND scriptctrl-handle <> 0 AND scriptctrl-type = 'OLE2'.

    DATA result_table TYPE STANDARD TABLE OF string.
    "Set Property Of ScriptCtrl 'AllowUI' = 1.
    SET PROPERTY OF scriptctrl 'Language' = 'VBScript'.
    CALL METHOD OF scriptctrl 'AddCode' EXPORTING #1 = vbscode.
    CALL FUNCTION 'AC_SYSTEM_FLUSH' EXCEPTIONS OTHERS = 1.
    CALL METHOD OF scriptctrl 'Eval' = result_string EXPORTING #1 = 'GetPrinters()'.
    CALL FUNCTION 'AC_SYSTEM_FLUSH' EXCEPTIONS OTHERS = 1.
    FREE OBJECT scriptctrl.

    SPLIT result_string AT cl_abap_char_utilities=>cr_lf INTO TABLE result.

  ENDMETHOD.

ENDCLASS.


START-OF-SELECTION.
  DATA(result) = lcl_wmi=>get_printers( ).
  Write: / 'Installierte Drucker:'.
  LOOP AT result INTO DATA(line).
    WRITE: / line.
  ENDLOOP.

 

Neue Welten

Welche anderen Informationen noch auf Entdeckung im ABAP warten, kannst du auf dieser Microsoft-Seite herausfinden:

https://msdn.microsoft.com/en-us/library/aa389273(v=vs.85).aspx

Es ist eventuell eine ganz neue Benutzererfahrung möglich, wenn ein Programm mit langer Laufzeit, dass häufig auf mobilen Notebooks ausgeführt wird (zum Beispiel von Außendienstlern oder von Lagerarbeitern), vor Benutzung den Batteriestatus prüft. Wenn der Status “kritisch” ist, erfolgt die Meldung, dass das Notebook vor Ausführung evtl. lieber an Strom angeschlossen werden sollte…

Weiterführende Links

https://blogs.sap.com/2014/05/14/how-to-use-vbscript-inside-abap-and-store-vbscript-source-as-include/

https://wiki.scn.sap.com/wiki/display/Snippets/How+to+use+VBScript+in+ABAP

 

Enno Wulff